objc_msgSend执行流程

OC中的方法调用,其实都是转换为objc_msgSend函数的调用

objc_msgSend的执行流程可以分为3大阶段

  • 消息发送

  • 动态方法解析

  • 消息转发

    一、消息发送

  • 如果是从class_rw_t中查找方法
    已经排序的,二分查找
    没有排序的,遍历查找

  • receiver通过isa指针找到receiverClass
    receiverClass通过superclass指针找到superClass

    二、动态方法解析

  • 开发者可以实现以下方法,来动态添加方法实现
    +resolveInstanceMethod:
    +resolveClassMethod:

  • 动态解析过后,会重新走“消息发送”的流程
    “从receiverClass的cache中查找方法”这一步开始执行

三、消息转发

  • 开发者可以在forwardInvocation:方法中自定义任何逻辑
  • 以上方法都有对象方法、类方法2个版本(前面可以是加号+,也可以是减号-)
Share